clear;
load('D:\Program Files\DHRLS-master\dataset\gene_disease_Y.mat')
y = gene_disease_Y;
gamma = 0.5;
beta = 1;
lamda_1 = 1;
lamda_2 = 0.25;
knn = 50;
iter_max = 10;
    
fold_aupr_dhrls_ka=[];fold_auc_dhrls_ka=[];
nfolds =10;
crossval_idx = crossvalind('Kfold',y(:),nfolds);   %划分十组，返回组序号
for fold = 1:nfolds
	y_train = gene_disease_Y;
	test_idx  = find(crossval_idx==fold);   %返回当前折的所有
	y_train(test_idx) = 0;
	K1_list(:,:,2) = getGipKernel(y_train,gamma);  %疾病矩阵
	K2_list(:,:,4) = getGipKernel(y_train',gamma); %基因矩阵
 
	[weight_v1] = cka_kernels_weights(K1_list,y_train,1);
	[weight_v2] = cka_kernels_weights(K2_list,y_train,2);

    K_COM1 = combine_kernels(weight_v1, K1_list);	
	K_COM2 = combine_kernels(weight_v2, K2_list);

	[A_cos_com]  = DHRLS(K_COM1,K_COM2,y_train,beta,lamda_1,lamda_2,knn,iter_max);
	
	yy=y;
    test_labels = yy(test_idx);
    predict_scores = A_cos_com(test_idx);
    [X,Y,tpr,aupr] = perfcurve(test_labels,predict_scores,1, 'xCrit', 'reca', 'yCrit', 'prec');
    [X,Y,THRE,auc,OPTROCPT,SUBY,SUBYNAMES] = perfcurve(test_labels,predict_scores,1);


    fprintf('---------------- FOLD %d  \n',  fold)
    fprintf('--- FOLD %d - DHRLS---AUPR: %f ---AUC: %f \n', fold, aupr, auc)

    fold_aupr_dhrls_ka=[fold_aupr_dhrls_ka;aupr];
    fold_auc_dhrls_ka=[fold_auc_dhrls_ka;auc];

end
mean_aupr_dhrls_ka = mean(fold_aupr_dhrls_ka)
mean_auc_dhrls_ka = mean(fold_auc_dhrls_ka)


% 1.加载数据：通过 load 函数加载基因疾病关联数据集，并将其存储在变量 y 中。
% 
% 2.初始化参数：设置了一些算法参数，如 gamma、beta、lambda_1、lambda_2、knn、iter_max 等。
% 
% 3.进行10折交叉验证：通过 crossvalind 函数生成交叉验证的索引，然后使用 for 循环遍历每个折（fold）。
% 
% 4.准备训练集和测试集：根据当前折的索引，将数据集分割为训练集和测试集。
% 
% 5.构建核矩阵：使用 getGipKernel 函数计算基因矩阵和疾病矩阵的 GIP 核。
% 
% 6.计算核权重：利用 cka_kernels_weights 函数计算核权重。
% 
% 7.组合核矩阵：使用 combine_kernels 函数将基因矩阵和疾病矩阵的核矩阵按照计算得到的权重进行线性组合。
% 
% 8.训练模型：通过 DHRLS 方法训练模型，得到预测结果。
% 
% 9.评估模型性能：计算当前折的 AUPR 和 AUC 值，并输出到控制台。
% 
% 10.统计结果：将每个折的 AUPR 和 AUC 值存储起来，计算平均值并输出。
